package com.ufaud.ais.sys.service;

import java.util.List;

import com.ufaud.ais.pub.exception.BusinessException;
import com.ufaud.ais.pub.service.IGenericCRUDService;
import com.ufaud.ais.sys.entity.Department;

public interface IDepartmentService extends IGenericCRUDService<Department, Long> {
	
	/**
	 * 功能: 返回一个从根部门开始的完整对象图，并加载部门管理员
	 * @author 林可  2010-7-5 上午01:17:29
	 * @return
	 */
	Department getAllDepartmentInTreeStructure();
	
	/**
	 * 功能: 通过id返回一个部门以及它的所有直接、间接子部门列表
	 * @author 林可  2010-7-20 下午09:36:14
	 * @param id
	 * @return
	 */
	List<Department> getDeptWithDescendantsById(Long id);
	
	/**
	 * 功能: 通过id加载指定部门，并带出其父部门和部门负责人
	 * @author 林可  2010-7-20 下午10:19:25
	 * @param id
	 * @return
	 */
	Department getWithSuperDeptAndDeptManager(Long id);
	
	/**
	 * 功能: 通过id，返回一个部门的直接、间接父部门，和邻居部门的列表（不包括id所代表的部门自身）
	 * @author 林可  2010-7-20 下午10:00:09
	 * @param id
	 * @return
	 */
	List<Department> getAncestorAndSiblingDeptById(Long id);
	
	/**
	 * 功能: 更新部门信息
	 * @author 林可  2010-7-20 下午05:24:36
	 * @param dept
	 */
	void updateDepartment(Department dept);

	/**
	 * 功能: 删除某部门
	 * @author 林可  2010-7-21 下午01:27:27
	 * @param id
	 * @throws BusinessException 当部门尚有员工，或者有子部门时，抛出此异常
	 */
	void deleteDepartmentById(Long id) throws BusinessException;
}
